$Description$
给$n$个数,求数字和前$k$大的区间的和
$Solution$
我们考虑先找全局最大值,再删去全局最大值,找次大值,然后删去,直到找到第$k$大值。
枚举左端点,此时可行的右端点是一个区间$[i+L-1,min(i+R-1,n)]$,可以搞一个结构体$\left( i,i+L-1,min(i+R-1,n),\max\limits_{j=i+L-1}^{min(i+R-1,n)}sum[j],loc\right),loc$表示$max\;sum[j]$的位置$j,$然后把它扔到堆里,堆中比较$\max\limits_{j=i+L-1}^{min(i+R-1,n)}sum[j]-sum[i-1]$
全局最大值取堆顶${x,l,r,mx,loc}$,然后弹出,放入$\left(x,l,loc-1,\max\limits_{j=l}^{loc-1}sum[j],nloc_1\right)$和
$\left(x,loc+1,r,\max\limits_{j=loc+1}^{r}sum[j],nloc_2\right)$
这个东西显然是对的
$Code$
1 |
|